package concurent

import (
	"fmt"
	"time"
)

/*
定时器的意思，可以实现一些定时操作，内部也是通过channel来实现的
当然 如果只是单纯的想等待的话 可以直接使用time.Sleep操作
*/

func Timer_f4() {
	fmt.Println("before")
	t := time.NewTimer(time.Second * 5)
	t.Reset(time.Second * 1)
	<-t.C
	fmt.Println("after")
}

func Timer_f3() {
	t := time.NewTimer(time.Second * 2)
	go func() {
		// stop后不再执行
		<-t.C
		fmt.Println("t expired")
	}()
	time.Sleep(time.Second * 1)
	// 停止定时器 相应方法不执行
	b := t.Stop()
	if b {
		fmt.Println("t stop")
	}
	time.Sleep(time.Second * 2)
	fmt.Println("end")
}

func Timer_f2() {
	timer := time.NewTimer(time.Second * 2)
	fmt.Printf("time.Now(): %v\n", time.Now())
	// 可以不赋值  阻塞2s
	<-timer.C
	fmt.Printf("time.Now(): %v\n", time.Now())
}

func Timer_f1() {
	timer := time.NewTimer(time.Second * 2)
	fmt.Printf("time.Now(): %v\n", time.Now())
	// timer.C 为 chan time类型  阻塞2s获取时间
	c := <-timer.C
	fmt.Printf("c: %v\n", c)
}
